CHS-Baustein

Kurz-Information

Name

CHS

→POE-Typ

→Funktion

Kategorie

Standard (non-safe), NumericEnh, Baustein mit interner Fehlerdiagnose

Konform zur →IEC-Norm

(Plus) nicht in IEC-Norm vorgesehen

Grafische Schnittstelle

Verfügbar ab

Version 1.64.0 (für Neuron Power Engineer) – Anfangsvariante

Version 3.8.0 (für Bibliothek Standard (non-safe)): Baustein in diese Bibliothek verschoben

Funktionalität

Der Baustein liefert den Wert, der am Eingang IN anliegt, mit geändertem Vorzeichen. Falls der Wert 0 anliegt, liefert der Baustein wieder 0.

Verhalten bei vorzeichenlosen ganzen Datentypen (= ANY_UNSIGNED – siehe zugehörige elementare Datentypen beim Glossar-Eintrag →allgemeiner Datentyp):

  • Der Baustein liefert einen vorzeichenlosen Wert. Dieser Wert entsteht so: Der an IN anliegende Wert, sofern dieser > 0 ist, wird von der Obergrenze des entsprechenden Datentyps subtrahiert, dann wird der Wert 1 addiert: upper limit – IN + 1
    Siehe unter "Beispiel für Verwendung im ST-Editor".
    Als Hintergrund-Information: Der an IN anliegende Wert wird als Bitmuster mit Vorzeichen interpretiert. Dieser Wert mit Vorzeichen wird umgerechnet (und wieder als vorzeichenloser Wert ausgegeben).

  • Zusätzlich wird der Ausgang ENO auf den Wert FALSE gesetzt.

Verhalten bei anderen Datentypen:

  • Für ANY_SIGNED gültig: Falls die Untergrenze des entsprechenden Datentyps an IN anliegt, liefert der Baustein diesen Wert. Grund: Für die Untergrenze des Datentyps ist der Wert mit geändertem Vorzeichen nicht zulässig.
    Siehe unter "Beispiel für Verwendung im ST-Editor".

  • Für ANY_SIGNED und ANY_REAL gültig: Der Wert ENO ist immer auf den Wert TRUE gesetzt.

Eingänge, Ergebniswert

 

Bezeichner

→Datentyp

Beschreibung

Eingänge:

IN

REALLREALUSINTUINTUDINTULINTSINTINTDINT oder LINT
(entspricht dem →allgemeinen Datentyp ANY_NUM)

Wert

Ergebniswert:

REAL, LREAL, USINT, UINT, UDINT, ULINT, SINT, INT, DINT or LINT
(entspricht dem →allgemeinen Datentyp ANY_NUM)

 

Der Eingang EN und der Ausgang ENO sind für den →Aufruf des Bausteins verfügbar. Siehe "Ausführungssteuerung: EN, ENO" für Informationen zum Eingang EN und zum Ausgang ENO.

Informieren Sie sich unter:

Interne Fehlerdiagnose für Baustein

Der Baustein prüft vor der Ausführung den Datentyp des anliegenden Werts.
Bei einem vorzeichenlosen ganzen Datentyp (= ANY_UNSIGNED) wird der Ausgang ENO des Bausteins auf den Wert FALSE (oder eine Entsprechung) gesetzt.

Beispiel für Verwendung im ST-Editor

Die berechneten Werte werden mit Hilfe des Assert-Bausteins ausgewertet.

FUNCTION_BLOCK ExampleChs
  VAR
    resultSint1, resultSint2, resultSint3, resultSint4 : SINT;
    resultUsint1, resultUsint2, resultUsint3 : USINT;
    resultUint  : UINT;
    CheckENOSint1, CheckENOSint2, CheckENOSint3, CheckENOSint4, CheckENOUsint1, CheckENOUsint2, CheckENOUsint3, CheckENOUint : BOOL;
  END_VAR
  resultSint1 := CHS(IN := SINT#-5, ENO => CheckENOSint1);
  Assert(resultSint1 = 5);
  Assert(CheckENOSint1 = TRUE);
  resultSint2 := CHS(IN := SINT#0, ENO => CheckENOSint2);
  Assert(resultSint2 = 0);
  Assert(CheckENOSint2 = TRUE);
  resultSint3 := CHS(IN := SINT#5, ENO => CheckENOSint3);
  Assert(resultSint3 = -5);
  Assert(CheckENOSint3 = TRUE);
  resultSint4 := CHS(IN := SINT#-128, ENO => CheckENOSint4);  (* '-128' is the lower limit for SINT. *)
  Assert(resultSint4 = -128);                                 (* The upper limit for SINT is: 127. Therefore, value '128' is not possible. *)
  Assert(CheckENOSint4 = TRUE);
  resultUsint1 := CHS(IN := USINT#3, ENO => CheckENOUsint1);
  Assert(resultUsint1 = 253);          (* Upper limit for USINT = 255. Therefore, the block calculates: 255 - 3 + 1 = 253 *)
  Assert(CheckENOUsint1 = FALSE);
  resultUsint2 := CHS(IN := USINT#155, ENO => CheckENOUsint2);
  Assert(resultUsint2 = 101);          (* Upper limit for USINT = 255. Therefore, the block calculates: 255 - 155 + 1 = 101 *)
  Assert(CheckENOUsint2 = FALSE);
  resultUsint3 := CHS(IN := USINT#0, ENO => CheckENOUsint3);
  Assert(resultUsint3 = 0);            (* Upper limit for USINT = 255. The calculation '255 - 0 + 1' would result in the value '256' that is out of range. *)
  Assert(CheckENOUsint3= FALSE);
  resultUint := CHS(IN := UINT#3, ENO => CheckENOUint);
  Assert(resultUint = 65533);          (* Upper limit for UINT = 65535. Therefore, the block calculates: 65535 - 3 + 1 = 253 *)
  Assert(CheckENOUint = FALSE);
END_FUNCTION_BLOCK

Bei der Erstellung Ihrer Anwendung im ST-Editor erstellen Sie den Aufruf eines Bausteins, indem Sie den laut Syntax erforderlichen Text eintippen oder die Inhaltshilfe verwenden.